import { createRouter, createWebHistory } from 'vue-router';
import { useUserStore } from '@/stores/user';
import { staticRoutes, layoutRoute } from './routes';
import http from '@/utils/request';
import { usePermissionStore } from '@/stores/permission'

const router = createRouter({
  history: createWebHistory(),
  routes: [...staticRoutes, layoutRoute],
  scrollBehavior: () => ({ top: 0 })
});

const whiteList = ['/login', '/404', '/front']; // 新增白名单定义

// 启用路由守卫
router.beforeEach(async (to) => {
  const userStore = useUserStore()
  const permissionStore = usePermissionStore()

  // 1. 白名单检查（保持不变）
  if (whiteList.some(path => to.path.startsWith(path))) {
    return true
  }

  // 2. 权限路由标识（保持不变）
  const isAuthRoute = to.path.startsWith('/dashboard') || to.meta?.requiresAuth

  // 3. 未登录访问受保护路由（保持不变）
  if (!userStore.library_token && isAuthRoute) {
    return `/login?redirect=${encodeURIComponent(to.fullPath)}`
  }

  // 4. 已登录处理逻辑
  if (userStore.library_token) {
    // 4.1 获取用户信息（无论是否已有roles）
    if (!userStore.library_users.roles.length) {
      try {
        const infoRes = await http.get('/user/getInfo')
        userStore.roles = infoRes.data.roles
      } catch (error) {
        userStore.logout()
        return '/login'
      }
    }

    // 4.2 动态路由处理（新增核心逻辑）
    if (userStore.roles.length && !permissionStore.hasGenerated) {
      // 生成权限路由
      await permissionStore.generateRoutes(userStore.roles)

      // 清除旧路由（防止重复添加）
      permissionStore.routes.forEach(route => {
        if (router.hasRoute(route.name)) {
          router.removeRoute(route.name)
        }
      })

      // 添加新路由
      permissionStore.routes.forEach(route => {
        router.addRoute('layoutRoute', {
          ...route,
          path: route.path.replace(/^\//, '')
        })
      })

      // 强制重新导航（关键）
      return to.fullPath
    }

    // 4.3 已登录访问登录页跳转（保持不变）
    if (to.path === '/login') {
      return '/dashboard'
    }
  }

  return true
})

export default router;